package cn.tedu.hotel.serve.mapper;

import cn.tedu.hotel.serve.pojo.dto.HotelDTO;
import cn.tedu.hotel.serve.pojo.dto.HotelRoomInfoDTO;
import cn.tedu.hotel.serve.pojo.entity.Hotel;
import cn.tedu.hotel.serve.pojo.entity.HotelRoomInfo;
import cn.tedu.hotel.serve.pojo.vo.*;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface HotelMapper {
    /**
     * 查询房间表的信息
     * @return
     */
    List<RoomVO> getRoomList();

    /**
     * 查询酒店等级的信息
     * @return
     */
    List<HotelLevelVO> getHotelLevelList();

    /**
     * 插入酒店信息，影响的表和要使用的表
     * hotel，hotel_level,hotel_room_info,room
     * @param hotel
     */
    int addHotelInfo(Hotel hotel);

    /**
     * 根据酒店名字查询数量
     * @param name
     * @return
     */
    int countByName(String name);

    /**
     * 根据酒店地点查询数量
     * @param location
     * @return
     */
    int countByLocation(String location);

    /**
     * 根据酒店星级id查询数据
     * @param id
     * @return
     */
    HotelLevelVO getByHotelLevelId(Long id);

    /**
     * 批量添加酒店和房间的详情
     * @param hotelRoomInfos
     * @return
     */
    int addHotelRoomInfoBatch(List<HotelRoomInfo> hotelRoomInfos);

    /**
     * 查询hotel表的信息
     * @return
     */
    List<HotelVO> getHotelList();

    /**
     * 根据包含location字段来查询酒店
     * @param location
     * @return
     */
    List<HotelVO> getHotelListBySomethingOfLocation(String location);

    /**
     * 根据用户提交的数据进行查询
     * @param content
     * @return
     */
    List<HotelVO> getHotelListByContent(String content);

    HotelStandardVO getHotelById(Long id);

    void deleteById(Long id);

    /**
     * 根据酒店ID和房间ID去查询酒店房间信息
     * @param hotelId
     * @param roomId
     * @return
     */
    HotelRoomInfoVO getHotelRoomInfoByHotelIdAndRoomId(
            @Param("hotelId")Long hotelId,@Param("roomId") Long roomId);

    /**
     * 根据酒店ID去查询酒店所有房间信息
     * @param hotelId
     * @return
     */
    List<HotelRoomInfoVO> getHotelRoomInfoByHotelId(@Param("hotelId")Long hotelId);

    /**
     * 后台更新数据
     * @param hotel
     */
    void update(Hotel hotel);

    /**
     * 后台获取酒店房间信息
     * @return
     */
    List<HotelRoomInfoVO> getAdminHotelRoomInfoList();

    /**
     * 后台根据酒店房间信息ID删除数据
     * @param id
     * @return
     */
    int deleteHotelRoomInfo(Long id);

    /**
     * 根据酒店房间信息ID查询数据
     * @param id
     * @return
     */
    HotelRoomInfoVO getAdminHotelRoomInfoById(Long id);

    /**
     * 修改酒店房间信息
     * @param hotelRoomInfo
     * @return
     */
    int updateAdminHotelRoomInfoById(HotelRoomInfo hotelRoomInfo);

    /**
     * 向酒店房间信息表插入数据
     * @param hotelRoomInfo
     * @return
     */
    int addAdminHotelRoomInfo(HotelRoomInfo hotelRoomInfo);
}
